home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / oper_sys / emerald / emrldsys.lha / Kernel / h / kEvents.h < prev    next >
Encoding:
C/C++ Source or Header  |  1990-08-17  |  2.4 KB  |  79 lines

  1. #ifndef HoldSigs
  2.  
  3. #ifndef stdTypes_h
  4. #include "Kernel/h/stdTypes.h"
  5. #endif  stdTypes_h
  6. #ifndef NSIG
  7. #include <signal.h>
  8. #endif
  9.  
  10. #define MAXTASKQ    100    /* Max number of events that can be queued */
  11.  
  12. /*
  13.  * HoldSigs, ReleaseSigs
  14.  *
  15.  * Prevents signal handlers from being called.  Signals will be queued
  16.  * up until ReleaseSigs is called.  These are macros, and you must
  17.  * #include ~eden/Source/ProcessA/Events.h to get them.
  18.  *
  19.  * 7/18/88 cjeffery - HoldSigs and ReleaseSigs now implemented via a
  20.  * simple xkernel semaphore around critical regions.  Someday this can
  21.  * be greatly optimized (separate critical regions can use separate
  22.  * semaphores, and the emerald code could be query replaced!).
  23.  */
  24.  
  25. #ifdef xkernel
  26. #define HoldSigs()    holdsigs()
  27. #define ReleaseSigs()   releasesigs()
  28. #else
  29. #define HoldSigs()    SigsHeld = 1
  30. #define ReleaseSigs()   if (SigsHeld = Pending) ReleaseSigs1()
  31. #endif xkernel
  32. extern  void ReleaseSigs1();
  33. /*
  34.  * TaskDequeue, TaskEnqueue
  35.  *
  36.  * This is just dequeue coerced into a pointer to a TaskQueue struct.
  37.  */
  38.  
  39. #define TaskDequeue(x)    (struct TaskQueue *) dequeue((struct Queue *) x)
  40. #define TaskEnqueue(head,elem)  enqueue((struct Queue *) head, \
  41.     (struct Queue *) elem)
  42.  
  43. extern int NodeNumber;
  44. extern int SigsHeld;            /* 1 iff signals are to be held. */
  45. extern int RealSigHandler();
  46. extern int DebugLevel;        /* Level of debugging output */
  47. extern int IamProcessB;        /* I am process B (as opposed to A) */
  48.  
  49. extern struct TaskQueue {
  50.     struct Queue queue;
  51.     int (*handler)();
  52.     char *arg;
  53. } FreeQ, TaskQ, TaskArray[MAXTASKQ];
  54.  
  55. /*
  56.  * SigTable:  An array of structs, one entry for each signal.  For
  57.  * each signal there is a handler and a count of how many times this
  58.  * signal has occured but not been handled yet.
  59.  * Signals are counted by the real signal handler when signals are held.
  60.  * They are handled when releasesigs is called.
  61.  */
  62. extern struct SigTable {
  63.     void (*Handler)();    /* Handler for this signal */
  64.     int Ntimes;        /* Incremented every time the signal
  65.                    occurs and signals are held; decremented
  66.                                    when handler is called by ReleaseSigs1. */
  67. } SigTable[NSIG];
  68.  
  69.  
  70. extern int                 ActSig[NSIG];
  71. extern int                 ActCount;
  72. extern int                 Pending;
  73. extern short int           shouldPause, reallyPause, dontPause;
  74.  
  75. extern void initqueue(), enqueue(), remqueue();
  76. extern struct Queue *dequeue();
  77. extern Boolean queueempty();
  78. #endif
  79.